
#include "TcpServer.hpp"

// ./server ip
int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        std::cerr << "格式错误，正确格式为: ./server ip" << std::endl;
        exit(1);
    }

    Enable_Console_Log_Strategy();

    // TcpServer t;
    // t.Init();
    // t.Run();

    // 创建TcpServer实例并传入Lambda表达式
    TcpServer server([](int sock, InetAddr &addr)
                     {
        return addr.StringAdd();
    }
     
    );

    server.Init();
    server.Run();










    // if (argc != 2)
    // {
    //     std::cerr << "格式错误，正确格式为: " << "./server ip" << std::endl;
    //     exit(1);
    // }
    // std::string ServerIp = argv[1];

    // // 1、创建套接字
    // int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    // if (sockfd < 0)
    // {
    //     std::cerr << "创建套接字失败" << std::endl;
    //     exit(2);
    // }

    // // bind
    // struct sockaddr_in sock;
    // socklen_t len = sizeof(sock);
    // sock.sin_family = AF_INET;
    // sock.sin_port = htons(8080);
    // sock.sin_addr.s_addr = INADDR_ANY;

    // bind(sockfd, (struct sockaddr *)&sock, len);

    // // 开始监听
    // if (listen(sockfd, 10) < 0)
    // {
    //     std::cerr << "listen失败" << std::endl;
    //     exit(3);
    // }

    // //这份代码只是练习熟悉tcp，这份代码没有多线程，没有多进程，所以只能一个客户连接，这个在现实生活是不会存在的
    // while (true)
    // {

    //     struct sockaddr_in client;
    //     socklen_t clen = sizeof(client);
    //     int clientfd = accept(sockfd, (struct sockaddr *)&client, &clen);

    //     //这里为什么要两次循环呢
    //     //如果不添加两个循环，那么客户端发送消息只能接收一次，第二次发的时候接收不到。添加两个循环，让服务端一直读取当前当前客户的消息
    //     //为什么第二次读取不到了呢，如果只有一个循环，当发送完成之后会走到accept一直在等新的客户连接，所以不能继续读取咯
    //     while (true)
    //     {

    //         char buff[1024];
    //         int rlen = read(clientfd, buff, sizeof(buff));
    //         if (rlen > 0)
    //         {
    //             std::cout << buff << std::endl;
    //         }
    //     }
    // }
    return 0;
}